home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1995-11-25 | 3.7 KB | 115 lines |
- IMPLEMENTATION MODULE BitBlt;
-
- FROM SYSTEM IMPORT ADDRESS,ADR,VAL;
- FROM VDIInquires IMPORT ExtendedInquire;
- FROM GEMVDIBase IMPORT VDIWorkInType,VDIWorkOutType,BigPxyArrayType;
- FROM AES IMPORT GrafHandle;
- FROM Storage IMPORT ALLOCATE,DEALLOCATE;
- FROM VDIRasters IMPORT CopyRasterOpaque,MFDBType,MFDBptr;
- FROM GEMAESBase IMPORT AESIntOut;
-
- PROCEDURE MemSize(W,H:CARDINAL; VAR Planes,wWidth :CARDINAL):CARDINAL;
- VAR CW,CH,BW,BH,
- handle : INTEGER;
- WorkOut : VDIWorkOutType;
- BEGIN
- handle:=GrafHandle(CW,CH,BW,BH);
- ExtendedInquire(handle,1,WorkOut);
- Planes:=WorkOut[4];
- IF Planes= 0 THEN HALT; END(*IF*);
- wWidth:=(W DIV 16)+(W MOD 16);
- RETURN( wWidth*2*H*Planes);
- END MemSize;
-
- PROCEDURE CopyMemToScreen(x,y,w,h: INTEGER; buf: ADDRESS;DeAlloc :BOOLEAN );
- VAR CW,CH,BW,BH,
- handle : INTEGER;
- XYWH : BigPxyArrayType;
- ScreenMFDB,MemoryMFDB : MFDBType;
- Size : CARDINAL;
- BitPlanes, WBreite : CARDINAL;
-
-
- BEGIN
- XYWH[0]:=0; XYWH[1]:=0; XYWH[2]:=w; XYWH[3]:=h;
- XYWH[4]:=x;XYWH[5]:=y;
- XYWH[6]:=x+w;XYWH[7]:=y+h;
- handle:=GrafHandle(CW,CH,BW,BH);
- Size:= MemSize(w,h,BitPlanes,WBreite);
- ScreenMFDB.pointer:=0D;
- ScreenMFDB.width:=w;
- ScreenMFDB.widthW:=WBreite;
- ScreenMFDB.height:=h;
- ScreenMFDB.format:=1;
- ScreenMFDB.planes:=BitPlanes;
- ScreenMFDB.rsrvd1:=0;
- ScreenMFDB.rsrvd2:=0;
- MemoryMFDB.pointer:=buf+(buf MOD 16D);
- MemoryMFDB.width:=w;
- MemoryMFDB.widthW:=WBreite;
- MemoryMFDB.height:=h;
- MemoryMFDB.format:=1;
- MemoryMFDB.planes:=BitPlanes;
- MemoryMFDB.rsrvd1:=0;
- MemoryMFDB.rsrvd2:=0;
- CopyRasterOpaque(handle,3,XYWH,ADR(MemoryMFDB),ADR(ScreenMFDB));
- IF DeAlloc THEN DEALLOCATE(buf); END(*IF*);
- END CopyMemToScreen;
-
- PROCEDURE CopyScreenToMem(x,y,w,h: INTEGER; VAR buf:ADDRESS);
- VAR CW,CH,BW,BH,
- handle : INTEGER;
- XYWH : BigPxyArrayType;
- ScreenMFDB,MemoryMFDB : MFDBType;
- BitPlanes, WBreite : CARDINAL;
- BEGIN
- ALLOCATE(buf, MemSize(w,h,BitPlanes,WBreite));
- IF buf#NIL THEN
- handle:=GrafHandle(CW,CH,BW,BH);
- ScreenMFDB.pointer:=0D;
- ScreenMFDB.width:=w;
- ScreenMFDB.widthW:=WBreite;
- ScreenMFDB.height:=h;
- ScreenMFDB.format:=1;
- ScreenMFDB.planes:=BitPlanes;
- ScreenMFDB.rsrvd1:=0;
- ScreenMFDB.rsrvd2:=0;
- XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=x+w; XYWH[3]:=y+h;
- XYWH[4]:=0;XYWH[5]:=0; XYWH[6]:=w;XYWH[7]:=h;
- MemoryMFDB.pointer:=buf+(buf MOD 16D);
- MemoryMFDB.width:=w;
- MemoryMFDB.widthW:=WBreite;
- MemoryMFDB.height:=h;
- MemoryMFDB.format:=1;
- MemoryMFDB.planes:=BitPlanes;
- MemoryMFDB.rsrvd1:=0;
- MemoryMFDB.rsrvd2:=0;
- CopyRasterOpaque(handle,3,XYWH,ADR(ScreenMFDB),ADR(MemoryMFDB));
- END(*IF*);
- END CopyScreenToMem;
-
- PROCEDURE CopyScreenToScreen(x,y,w,h,xDest,yDest :INTEGER);
- VAR CW,CH,BW,BH,Handle : INTEGER;
- XYWH : BigPxyArrayType;
- Screen1MFDB,Screen2MFDB : MFDBType;
-
- BEGIN
- Handle:=GrafHandle(CW,CH,BW,BH);
- Screen1MFDB.pointer:=0D;
- Screen1MFDB.width:=w;
- Screen1MFDB.height:=h;
- Screen1MFDB.format:=1;
- Screen1MFDB.rsrvd1:=0; Screen1MFDB.rsrvd2:=0;
- XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=w+x; XYWH[3]:=h+y;
- XYWH[4]:=xDest;XYWH[5]:=yDest; XYWH[6]:=w+xDest;XYWH[7]:=h+yDest;
- Screen2MFDB.pointer:=0D;
- Screen2MFDB.width:=w;
- Screen2MFDB.height:=h;
- Screen2MFDB.format:=1;
- Screen2MFDB.rsrvd1:=0; Screen2MFDB.rsrvd2:=0;
- CopyRasterOpaque(Handle,3,XYWH,ADR(Screen1MFDB),ADR(Screen2MFDB));
- END CopyScreenToScreen;
-
-
- END BitBlt.
-